﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FrbaCommerce.Registro_de_Usuario
{
    public partial class FormRegistroUsuario : Form
    {
        public struct Usuario{
            public string nombre;
            public string pw;
            public bool hab;
            public bool des;
        };

        public struct Cliente
        {
            public int DNI;
            public string Ape;
            public string Nom;
            public string TDNI;
            public string Mail;
            public Int64 Tel;
            public string Dom;
            public int Nro;
            public int Piso;
            public string Dpto;
            public int CP;
            public string fechaNac;

        };

        public struct Empresa
        {
            public string RazonSocial;
            public string Mail;
            public Int64 Tel;
            public string Calle;  
            public int Nro;
            public int Piso;
            public string Dpto;
            public string Localidad;
            public int CP;
            public string Ciudad;
            public string CUIT;
            public string NombreContacto;
            public string fechaCreacion;

        };

        

        public FormRegistroUsuario()
        {
            InitializeComponent();
        }

        private Control buscarControl(string nombreDelControl)
        {
            foreach (Control ctr in panel1.Controls[0].Controls)
                if (ctr.Name == nombreDelControl)
                    return ctr;
            return null;
        
        }

        private bool comprobarControles() {
            bool retorno = true;

            foreach (Control ctr in panel1.Controls[0].Controls)
                if ((ctr is TextBox || ctr is MaskedTextBox) && estaVacio(ctr.Text))
                {
                    if (ctr.Name.Equals("textBoxPiso") || ctr.Name.Equals("textBoxDepto"))
                    {
                    }
                    else
                    {
                        ctr.BackColor = Color.Tomato;
                        retorno = false;
                    }
                }

            return retorno;
        }

        private void comboBoxRol_SelectedIndexChanged(object sender, EventArgs e)
        {
            Abm_Cliente.FormAltaCliente formCliente = new Abm_Cliente.FormAltaCliente();
            Abm_Empresa.FormAltaEmpresa formEmpresa = new Abm_Empresa.FormAltaEmpresa();
            Panel panel = new Panel();
            panel1.Controls.Clear();
            switch (comboBoxRol.Text)
            {
                case "Cliente":
                    panel = formCliente.panel1;
                    panel1.Controls.Add(panel);
                    break;

                case "Empresa":
                    panel = formEmpresa.panel1;
                    panel1.Controls.Add(panel);
                    break;
            }
        }

        private void altaRol() {
            MessageBox.Show("ALTA ROL USUARIO");
        }

        public Usuario crearUsuario(){
        Usuario user = new Usuario();
            user.nombre = textBoxUser.Text;
            user.pw = textBoxPW.Text;
            user.hab = true;
            user.des = false;
            return user;
        }

        public static bool estaVacio(String cadena)
        {
            return string.IsNullOrEmpty(cadena);
        }

        public static bool estaVacio(int entero)
        {
            return string.IsNullOrEmpty(entero.ToString());
        }

        public Cliente crearCliente()
        {
            Cliente client = new Cliente();
            client.DNI = Convert.ToInt32(buscarControl("textBoxDNI").Text);
            client.Ape = buscarControl("textBoxApellido").Text;
            client.Nom = buscarControl("textBoxNombre").Text;
            client.TDNI = Convert.ToString(((ComboBox)buscarControl("comboBoxTipoDoc")).SelectedValue);
            client.Mail = buscarControl("textBoxMail").Text;
            client.Tel = Convert.ToInt64(buscarControl("textBoxTel").Text);
            client.Dom = buscarControl("textBoCalle").Text;
            client.Nro = Convert.ToInt32(buscarControl("textBoxNro").Text);
            if (string.IsNullOrEmpty(buscarControl("textBoxPiso").Text))
            {
                client.Piso = 0;
            }
            else
            {
                client.Piso = Convert.ToInt32(buscarControl("textBoxPiso").Text);
            }


            
            if (string.IsNullOrEmpty(buscarControl("textBoxDepto").Text))
            {
                client.Dpto = "";
            }
            else
            {
                client.Dpto = buscarControl("textBoxDepto").Text;
            }


            
            client.CP = Convert.ToInt32(buscarControl("textBoxCP").Text);
            client.fechaNac = ((MonthCalendar)buscarControl("monthCalendarNacimiento")).SelectionEnd.ToShortDateString();

            return client;
        }

        public Empresa crearEmpresa()
        {
            Empresa empresa = new Empresa();

            empresa.RazonSocial = buscarControl("textBoxRazonSocial").Text;
            empresa.Mail = buscarControl("textBoxMail").Text;
            empresa.Tel = Convert.ToInt64(buscarControl("textBoxTel").Text);
            empresa.Calle = buscarControl("textBoxCalle").Text;
            empresa.Nro = Convert.ToInt32(buscarControl("textBoxNro").Text);
            if (string.IsNullOrEmpty(buscarControl("textBoxPiso").Text))
            {
                empresa.Piso = 0;
            }
            else
            {
                empresa.Piso = Convert.ToInt32(buscarControl("textBoxPiso").Text);
            }


            if (string.IsNullOrEmpty(buscarControl("textBoxDepto").Text))
            {
                empresa.Dpto = "";
            }
            else
            {
                empresa.Dpto = buscarControl("textBoxDepto").Text;
            }

            
            empresa.Localidad = buscarControl("textBoxLocal").Text;
            empresa.CP = Convert.ToInt32(buscarControl("textBoxCP").Text);
            empresa.Ciudad = buscarControl("textBoxCiudad").Text;
            empresa.CUIT = buscarControl("textBoxCUIT").Text;
            empresa.NombreContacto = buscarControl("textBoxNomCont").Text;        
            empresa.fechaCreacion = ((MonthCalendar)buscarControl("monthCalendarCreacion")).SelectionEnd.ToShortDateString();
            return empresa;
        
        }

        private void buttonAltaUsuario_Click(object sender, EventArgs e)
        {
            int a = 0;

            if (!comprobarControles())
            {
                MessageBox.Show("Por favor, complete todos los campos");
                return;
            }

            if (comboBoxRol.Text == "Cliente")
            {
                Abm_Cliente.FormAltaCliente formAlta = new Abm_Cliente.FormAltaCliente();
                if (formAlta.altaCliente(crearUsuario(), crearCliente()) == 1)
                    return;
            }
            else
            {
                //primero valido el CUIT.
                string cuit = buscarControl("textBoxCUIT").Text;
                char[] valoresValidosCUIT = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-' };
                string caracteresNoValidos = cuit.TrimStart(valoresValidosCUIT);

                if (caracteresNoValidos == "")
                {
                    Abm_Empresa.FormAltaEmpresa formAlta = new Abm_Empresa.FormAltaEmpresa();
                    if (formAlta.altaEmpresa(crearUsuario(), crearEmpresa()) == 1)
                        return;
                }else
                {               
                    MessageBox.Show("El CUIT contiene caracteres no válidos, ejemplo CUIT: 99-99999999-99", "Error campo CUIT", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    a = 1;
                }
            }

            if (a == 0)
            {
                MessageBox.Show("Gracias por registrarte!");
                this.Close();
            }
            else
            { }
        }

        private void FormRegistroUsuario_Load(object sender, EventArgs e)
        {
           //Los roles ahora estan hardcodeados, en realidad hay que leerlos de la DB y mostrar solo los que no sean Admin
           //Y ademas, dejar el tipo de usuario aparte, con un radiobutton o un checkbox
            comboBoxRol.SelectedIndex = 0;
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }
    }
}
